package org.lg.framework;

import org.lg.framework.protocol.ClientProtocol;
import org.lg.framework.protocol.HttpClient;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.net.URL;
import java.util.List;

public class ProxyFactory {
    public  static <T> T getProxy(final  Class interfaceClass){
        return (T)Proxy.newProxyInstance(interfaceClass.getClassLoader(),new Class[]{interfaceClass}, new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

                //信息对象 需要 接口名称 ，方法  参数类型 ，参数值
                Invocation invocation = new Invocation(interfaceClass.getName(),method.getName(),method.getParameterTypes(),args);
                String hostName = "localhost";//此处改为读取参数 properties 或者配置中心
                int port = 8088;//此处改为读取参数 properties 或者配置中心 配置中心定时监控git 或者定时监控redis zookeeper

                /**
                 * 客户端负载均衡
                 */

//                 List<URL> urls = null;//从配置中心得到最新配置
//                 URL url =  LoadBlance.getURL(urls);
//                 hostName = url.getHost();
//                 port = url.getPort();

                ClientProtocol clientProtocol = new HttpClient();//此处读取工厂提供的实现类
                String result =  clientProtocol.send(hostName,port,invocation);
                return result;
            }
        });
    }
}
